#include<iostream>
using namespace std;

struct Student{
    int id;
    string name;
    double score;
};

struct TreeNode {
    Student data;    // 存储结构体对象
    TreeNode* left;
    TreeNode* right;
};


int main(){
    Student stu1, stu2, stu3;

    stu1.id=1;
    stu1.name="A张三";
    stu1.score=95.2;

    stu2.id=2;
    stu2.name="B李四";

    stu3.id=3;
    stu3.name="C王二";

    //新建父节点
    TreeNode* root=NULL;
    root=(TreeNode*) malloc( sizeof(TreeNode) );
    //root->data.id=0;
    root->data=stu1;
    root->left=NULL;
    root->right=NULL;

    //新建左节点
    TreeNode* node2=NULL;
    node2=(TreeNode*)malloc( sizeof(TreeNode) );
    node2->data=stu2;
    node2->left=NULL;
    node2->right=NULL;
    //插入父节点左侧
    root->left=node2;

    //新建右节点
    TreeNode* node3=NULL;
    node3=(TreeNode*)malloc( sizeof(TreeNode) );
    node3->data=stu3;
    node3->left=NULL;
    node3->right=NULL;
    //插入父节点右侧
    root->right=node3;

    //创建节点D，挂在root->left->right
    TreeNode* node4=(TreeNode*)malloc( sizeof(TreeNode) );
    node4->data.id=4;
    node4->data.name="D麻子";
    node4->left=NULL;
    node4->right=NULL;
    //插入B的右节点
    node2->right=node4;

    //创建节点E，挂在root->right->left
    TreeNode* node5=(TreeNode*)malloc( sizeof(TreeNode) );
    node5->data.id=5;
    node5->data.name="E";
    node5->left=NULL;
    node5->right=NULL;
    //插入C的左节点
    node3->left=node5;

    //创建节点F，挂载C的右侧
    TreeNode* node6=(TreeNode*)malloc( sizeof(TreeNode) );
    node6->data.id=6;
    node6->data.name="F";
    node6->left=NULL;
    node6->right=NULL;
    //插入C的右节点
    node3->right=node6;

    /* 二叉树结构
         A
      B     C
     _ D   E F
    */

    cout << "学号 root: " << root->data.id << endl;
    cout << "学号 第二层 left: " << root->left->data.id << endl;
    cout << "学号 第二层 right: " << root->right->data.id << endl;
    //接着第三层的3个
    TreeNode* node;
    node = root->left; //B
    cout << "学号 第三层: " << node->right->data.id << endl;

    node=root->right; //C
    cout << "学号 第三层: " << node->left->data.id << endl;
    cout << "学号 第三层: " << node->right->data.id << endl;

    return 0;
}

